package com.wave.blog.serve.controller;

import com.mybatisflex.core.paginate.Page;
import com.wave.blog.serve.common.Result;
import com.wave.blog.serve.entity.User;
import com.wave.blog.serve.service.UserService;
import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource;
import java.util.List;

/**
 * 用户控制器
 * 提供用户相关的RESTful API接口
 *
 * @author wave
 */
@RestController
@RequestMapping("/users")
public class UserController {

    @Resource
    private UserService userService;

    /**
     * 创建用户
     *
     * @param user 用户对象
     * @return 创建的用户对象
     */
    @PostMapping
    public Result<User> createUser(@RequestBody User user) {
        boolean saved = userService.save(user);
        if (saved) {
            return Result.success(user);
        }
        return Result.error("创建用户失败");
    }

    /**
     * 更新用户
     *
     * @param id   用户ID
     * @param user 用户对象
     * @return 更新后的用户对象
     */
    @PutMapping("/{id}")
    public Result<User> updateUser(@PathVariable Long id, @RequestBody User user) {
        // 检查用户是否存在
        User existingUser = userService.getById(id);
        if (existingUser == null) {
            return Result.error("用户不存在");
        }
        
        user.setId(id);
        boolean updated = userService.updateById(user);
        if (updated) {
            return Result.success(user);
        }
        return Result.error("更新用户失败");
    }

    /**
     * 根据ID获取用户
     *
     * @param id 用户ID
     * @return 用户对象
     */
    @GetMapping("/{id}")
    public Result<User> getUserById(@PathVariable Long id) {
        User user = userService.getById(id);
        if (user != null) {
            return Result.success(user);
        }
        return Result.error("用户不存在");
    }

    /**
     * 删除用户
     *
     * @param id 用户ID
     * @return 响应结果
     */
    @DeleteMapping("/{id}")
    public Result<Void> deleteUser(@PathVariable Long id) {
        // 检查用户是否存在
        User user = userService.getById(id);
        if (user == null) {
            return Result.error("用户不存在");
        }
        
        boolean deleted = userService.removeById(id);
        if (deleted) {
            return Result.success();
        }
        return Result.error("删除用户失败");
    }

    /**
     * 获取所有用户列表
     *
     * @return 用户列表
     */
    @GetMapping("/list")
    public Result<List<User>> getUserList() {
        List<User> users = userService.list();
        return Result.success(users);
    }

    /**
     * 分页查询用户
     *
     * @param pageNum  页码，默认1
     * @param pageSize 每页大小，默认10
     * @return 分页结果
     */
    @GetMapping("/page")
    public Result<Page<User>> getUserPage(
            @RequestParam(defaultValue = "1") Integer pageNum,
            @RequestParam(defaultValue = "10") Integer pageSize) {
        Page<User> page = userService.page(new Page<>(pageNum, pageSize));
        return Result.successPage(page);
    }
}